package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * lambda表达式
 * JDK8之后推出的一个新特性
 * lambda旨在可以"面向函数式编程"
 *
 * 用更精简的语法创建匿名内部类，在前端开发中通常称它为"箭头函数"
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 *
 * 当接口中只有一个抽象方法时，才可以使用lambda表达式形式创建。
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类形式创建比较器
        Comparator<String> c = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };
        //lambda表达式写法
        Comparator<String> c1 = (String o1, String o2)->{
                return o1.length()-o2.length();
        };

        //lambda表达式中参数的类型可以忽略不写
        Comparator<String> c2 = (o1, o2)->{
            return o1.length()-o2.length();
        };

        /*
            如果方法体只有一句代码，那么方法体的"{}"可以忽略不写，并且如果这句代码
            含有return关键字时也要一同忽略。
         */
        Comparator<String> c3 = (o1, o2)->o1.length()-o2.length();

        List<String> list = new ArrayList<>();
        list.add("克晶老师");
        list.add("范传奇");
        list.add("刘桑");
        Collections.sort(list,(o1, o2)->o1.length()-o2.length());

        Collections.sort(list,new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });

    }
}




